<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>收银台</title>
    <link href="./ime/main.ec9503db.css" rel="stylesheet">

</head>

<body>
    <!-- 订单关闭 -->
    <div id="order-close" class="loading-overlay" style="display: none">
        <div style="text-align: center;">
            <div class="loading-text" style="color: #ffffff; font-size: 26px; margin-bottom: 15px;">订单即将关闭</div>
            <div id="close-countdown" class="loading-text" style="color: #ffffff; font-size: 20px;">3秒后关闭页面</div>
        </div>
    </div>

    <!-- Toast 提示框 -->
    <div id="toast" class="toast">
        <div class="toast-content">
            <span id="toast-message">提示信息</span>
        </div>
    </div>

    <div id="app" style="display: block;">
        <!-- logo header -->
        <div class="header-box">
            <div style="text-align: center">
                <h3 id="merchant-order-no">订单号:BF10241947421664901015056971</h3>
                <div id="countdown-box" style="display: flex;">
                    <div id="countdown" class="value countdown">00分00秒</div>
                </div>
            </div>
        </div>
        <!-- 金额 -->
        <div class="amount-box">
            <div class="label">订单金额:</div>
            <div id="amount" class="money">100元</div>
        </div>
 

        <div align="center" class="img-tips">----请认准下图商品购买----</div>
         
	  
        <div class="img-box">
            <img id="img1" src="./ime/17603552241755118613.jpg">
            <img id="img2" src="./ime/17603552241755118613.jpg">
        </div>
         <div align="center" id="shopName">认准店铺名称：1111111111111</div>
        <!-- 购买按钮 -->
        <div id="pay-btn" class="pay-btn" style="display: block;">
            <div class="pay-button" onclick="jump()">淘宝APP支付【点击跳转支付】</div>
        </div>
  

        <div id="account-box" class="cell" style="display: flex;">
            <div class="account-flex">
                <div class="label1"   >密码:</div>
                <input type="text" id="account" class="chongzhi"   placeholder="请在此处粘贴淘宝买到的卡密" size="24"  >
            </div>
            <div class="value">
                <div  align="center" class="copy" onclick="copy()">点击充值</div>
            </div>
        </div>
        
        <div align="center" style="margin-top: 10px;" class="img-tips" >淘宝购买成功之后，去订单里面点击提取（如图1）</div>
        <div align="center" class="img-tips">之后复制密码，进行充值（只复制密码即可）如图2</div>
  
        <div class="img-box">
            <img id="img1" src="./ime/1.jpg">
            <img id="img2" src="./ime/2.jpg">
        </div>
    
 
        <!-- 注意事项 -->
        <div id="steps" class="steps-box" style="margin-top: 10px; display: block;">
            <p align="center" style="color: red">禁止使用微信支付,不到账,不退不补</p>
            <p>1.跳转到淘宝网APP按上图商品直接支付即可.</p>
            <p>2.买错链接,不会到账,不退不补.</p>
            <p>3.一个卡密只能充值一次，可以重复购买.</p>
        </div>

        <div class="input-group">
            <button style="background-color: rgb(135, 206, 250);">下单火爆？下单失败？点我解决</button>
            <img src="./ime/zuji.jpg" style="display: block; width: 100%;">
        </div>
     
        <p align="center" >--------------------</p>
    </div>

    <script>
        // Toast 提示函数
        function showToast(message, duration = 2000) {
            const toast = document.getElementById('toast');
            const toastMessage = document.getElementById('toast-message');
            
            toastMessage.textContent = message;
            toast.classList.remove('fade-out');
            toast.classList.add('show');
            
            setTimeout(() => {
                toast.classList.add('fade-out');
                setTimeout(() => {
                    toast.classList.remove('show');
                    toast.classList.remove('fade-out');
                }, 300);
            }, duration);
        }

        // 显示关闭倒计时并关闭页面
        function showCloseCountdown() {
            const orderClose = document.getElementById('order-close');
            const closeCountdown = document.getElementById('close-countdown');
            
            // 显示弹窗
            orderClose.style.display = 'flex';
            
            // 开始倒计时（3秒）
            let countdown = 3;
            closeCountdown.textContent = `${countdown}秒后关闭页面`;
            
            const timer = setInterval(() => {
                countdown--;
                if (countdown > 0) {
                    closeCountdown.textContent = `${countdown}秒后关闭页面`;
                } else {
                    clearInterval(timer);
                    closeCountdown.textContent = '正在关闭页面...';
                    // 尝试关闭当前网页或返回上一页
                    setTimeout(() => {
                        // 先尝试关闭窗口
                        window.close();
                        // 如果无法关闭（例如不是window.open打开的页面），延迟后返回上一页
                        setTimeout(() => {
                            history.back();
                        }, 1000);
                    }, 500);
                }
            }, 1000);
        }

        // 1. 从URL中获取加密的oid参数
        function getUrlParam(name) {
            const reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`);
            const r = window.location.search.substr(1).match(reg);
            return r ? decodeURIComponent(r[2]) : null;
        }
        const encryptedOid = getUrlParam('oid');
        console.log('获取到的加密oid：', encryptedOid);
        
        if (!encryptedOid) {
            showToast('缺少订单参数，请重新生成订单');
        }
  
        // 2. 倒计时函数
        function startCountdown(orderNo, createTime) {
            const countdownElement = document.getElementById('countdown');
            
            // 计算剩余时间 = 300 - (当前时间 - create_time)
            const now = Math.floor(Date.now() / 1000); // 当前时间戳（秒级）
            let timeLeft = 300 - (now - createTime);
            
            // 如果剩余时间小于等于0，订单已失效
            if (timeLeft <= 0) {
                countdownElement.textContent = '00分00秒';
                // 订单已失效
                const orderNoElement = document.getElementById('merchant-order-no');
                orderNoElement.textContent = '订单已失效';
                orderNoElement.style.color = 'red';
                
                // 禁用充值按钮
                const rechargeBtn = document.querySelector('.copy');
                if (rechargeBtn) {
                    rechargeBtn.style.pointerEvents = 'none';
                    rechargeBtn.style.opacity = '0.5';
                    rechargeBtn.style.cursor = 'not-allowed';
                }
                
                // 禁用支付按钮
                const payBtn = document.querySelector('.pay-button');
                if (payBtn) {
                    payBtn.style.pointerEvents = 'none';
                    payBtn.style.opacity = '0.5';
                    payBtn.style.cursor = 'not-allowed';
                }
                
                showToast('订单已失效', 3000);
                return;
            }
            
            // 保存timer到window对象，以便全局访问
            window.countdownTimer = setInterval(() => {
                const minutes = Math.floor(timeLeft / 60);
                const seconds = timeLeft % 60;
                countdownElement.textContent = `${String(minutes).padStart(2, '0')}分${String(seconds).padStart(2, '0')}秒`;
                
                if (timeLeft <= 0) {
                    clearInterval(window.countdownTimer);
                    countdownElement.textContent = '00分00秒';
                    // 倒计时结束，调用接口检查订单状态
                    checkOrderStatus(orderNo);
                }
                
                timeLeft--;
            }, 1000);
        }

        // 2.0. 停止倒计时并禁用充值按钮
        function stopCountdownAndDisableRecharge() {
            // 停止倒计时
            if (window.countdownTimer) {
                clearInterval(window.countdownTimer);
                window.countdownTimer = null;
            }
            
            // 禁用充值按钮
            const rechargeBtn = document.querySelector('.copy');
            if (rechargeBtn) {
                rechargeBtn.style.pointerEvents = 'none';
                rechargeBtn.style.opacity = '0.5';
                rechargeBtn.style.cursor = 'not-allowed';
            }
        }

        // 2.1. 检查订单状态
        async function checkOrderStatus(orderNo) {
            try {
                const response = await fetch('http://101.pay123.shop/api/v1/order/check', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify({
                        order_number: orderNo
                    })
                });

                const result = await response.json();
                console.log('订单检查响应：', result);

                if (result.code === 400) {
                    // 订单已失效 - 更新页面显示
                    const orderNoElement = document.getElementById('merchant-order-no');
                    orderNoElement.textContent = '订单已失效';
                    orderNoElement.style.color = 'red';
                    
                    // 禁用充值按钮
                    const rechargeBtn = document.querySelector('.copy');
                    if (rechargeBtn) {
                        rechargeBtn.style.pointerEvents = 'none';
                        rechargeBtn.style.opacity = '0.5';
                        rechargeBtn.style.cursor = 'not-allowed';
                    }
                    
                    // 禁用支付按钮
                    const payBtn = document.querySelector('.pay-button');
                    if (payBtn) {
                        payBtn.style.pointerEvents = 'none';
                        payBtn.style.opacity = '0.5';
                        payBtn.style.cursor = 'not-allowed';
                    }
                    
                    showToast(result.msg || '订单已失效', 3000);
                } else if (result.code === 200) {
                    // 订单已完成
                    showToast(result.msg || '订单已完成', 3000);
                }
            } catch (error) {
                console.error('检查订单失败：', error);
                showToast('检查订单失败，请刷新页面', 3000);
            }
        }

        // 3. 解密函数（适配后端Base64编码逻辑）
        function decryptOrderData(encryptedStr) {
            try {
                // 步骤1：Base64解码为二进制数据（解决中文乱码核心）
                const binaryStr = atob(encryptedStr);
                // 将二进制字符串转为Uint8Array（原始字节流）
                const uint8Array = new Uint8Array(binaryStr.length);
                for (let i = 0; i < binaryStr.length; i++) {
                    uint8Array[i] = binaryStr.charCodeAt(i);
                }
                // 用UTF-8解析字节流（与后端保持一致）
                const decodedStr = new TextDecoder('utf-8').decode(uint8Array);
                console.log('Base64解码后的字符串：', decodedStr);

                // 步骤2：解析键值对为JSON对象
                const jsonData = {};
                decodedStr.split('&').forEach(pair => {
                    const [k, v] = pair.split('=');
                    if (k && v !== undefined) {
                        jsonData[k] = v;
                    }
                });
                console.log('解析后的订单数据：', jsonData);

                return jsonData;

            } catch (error) {
                console.error('解密失败：', error);
                showToast('订单解析失败：' + error.message, 3000);
                return null;
            }
        }

        // 4. 解密并渲染页面
        if (encryptedOid) {
            const orderData = decryptOrderData(encryptedOid);
            if (orderData) {
                // 渲染订单号
                if (orderData.order_no) {
                    document.getElementById('merchant-order-no').textContent = `订单号:${orderData.order_no}`;
                    // 保存订单号供充值使用
                    window.orderNo = orderData.order_no;
                    
                    // 启动倒计时（需要传入订单创建时间）
                    if (orderData.create_time) {
                        const createTime = parseInt(orderData.create_time);
                        startCountdown(orderData.order_no, createTime);
                    } else {
                        // 如果没有create_time，使用默认的300秒倒计时
                        startCountdown(orderData.order_no, Math.floor(Date.now() / 1000));
                    }
                }
                // 渲染金额
                if (orderData.order_amount) {
                    document.getElementById('amount').textContent = `${orderData.order_amount}元`;
                }
                //渲染店铺名称
                if(orderData.shop_name){
                    document.getElementById('shopName').textContent=`认准店铺名称：${orderData.shop_name}`;
                }
                // 渲染商品图片（image_url可能是用分号分隔的多个图片）
                const imgElements = document.querySelectorAll('.img-box img');
                if (imgElements.length > 0 && orderData.image_url) {
                    // 按分号分隔图片URL
                    const imageUrls = orderData.image_url.split(';');
                    // 第一个图片显示第一张（或所有图片的第一张）
                    if (imageUrls[0]) {
                        imgElements[0].src = imageUrls[0].trim();
                    }
                    // 第二个图片显示第二张（如果存在），否则显示第一张
                    if (imageUrls[1]) {
                        imgElements[1].src = imageUrls[1].trim();
                    } else if (imageUrls[0]) {
                        imgElements[1].src = imageUrls[0].trim();
                    }
                }
                // 存储支付链接
                window.payLink = orderData.shop_url || '#';
            }
        }

        // 5. 直接跳转到淘宝链接
        function jump() {
            if (window.payLink && window.payLink !== '#') {
                // 直接跳转到淘宝链接
                window.open(window.payLink, '_blank');
                showToast('正在跳转到淘宝...');
            } else {
                showToast('支付链接不存在');
            }
        }


        // 6. 卡密充值
        async function copy() {
            const cardNo = document.getElementById('account').value.trim();
            if (!cardNo) {
                showToast('请输入卡密');
                return;
            }

            // 检查订单号是否存在
            if (!window.orderNo) {
                showToast('订单信息不存在');
                return;
            }

            try {
                // 构建请求参数
                // 获取当前时间戳（秒级）
                const rechargeTime = Math.floor(Date.now() / 1000);
                
                const requestData = {
                    card_no: cardNo,
                    recharge_time: rechargeTime,
                    order_number: window.orderNo
                };

                console.log('充值请求参数：', requestData);

                // 调用后端接口
                const response = await fetch('http://101.pay123.shop/api/v1/order/charge', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify(requestData)
                });

                const result = await response.json();
                console.log('充值响应：', result);

                if (result.code === 200) {
                    // 停止倒计时并禁用充值按钮
                    stopCountdownAndDisableRecharge();
                    // 先提示充值成功
                    showToast('充值成功！', 2000);
                    // 等待2秒后显示倒计时弹窗并关闭页面
                    setTimeout(() => {
                        showCloseCountdown();
                    }, 2000);
                } else {
                    showToast(result.msg || '充值失败', 3000);
                }
            } catch (error) {
                console.error('充值失败：', error);
                showToast('网络错误，请重试', 3000);
            }
        }

    </script>
</body>
</html>